#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e5+5;
int T;
int n,m,l,vx;
int d[MAXN],v[MAXN],a[MAXN];
struct node{
    bool flag=false;
    int l=0,r=0;
}car[MAXN];
int p[MAXN];
bool q[MAXN];
//int ans;
int hk;
int an;
void check(int s,int ns,int dep)
{
    for(int i=1;i<=m;i++)
    {
        if(ns<p[i]&&a[dep]>0&&ns>0)
        {
            car[dep].l=i;
            car[dep].r=m;
            car[dep].flag=false;
            return;
        }
        else if(a[dep]<0&&ns>p[i]&&p[i]>s)
        {
            car[dep].l=i;
            for(int j=i+1;j<=m;j++)
                if(p[i]>ns)car[i].r=j-1;
            car[dep].flag=false;
            return;
        }

    }
    car[dep].flag=true;
}
void ans()
{
    for(int i=1;i<=n;i++)
    {
        if(!car[i].flag)
        {
            //bool flag=true;
            for(int j=i+1;j<=n;j++)
            {
                if((car[i].l<=car[j].l&&car[i].r>=car[j].l||car[i].l<=car[i].r&&car[i].r>=car[j].r)&&!car[j].flag)
                {
                    car[j].l=max(car[j].l,car[i].l);
                    car[j].r=min(car[j].r,car[i].r);
                }
            }
        }
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=car[i].l;j<=car[i].r;j++)
            if(q[i]) break;
            else{q[i]=true;an++;}
    }
}
int main()
{
    freopen("detect.in","r",stdin);
    freopen("detect.out","w",stdout);
    cin>>T;
    for(int i=1;i<=T;i++)
    {
        cin>>n>>m>>l>>vx;
        hk=n;
        for(int i=1;i<=n;i++)
            cin>>d[i]>>v[i]>>a[i];
        for(int i=1;i<=m;i++)
                cin>>p[i];
        for(int i=1;i<=n;i++)
        {
            if(a[i]!=0)
            {
                int s=(vx*vx-v[i]*v[i])/(2*a[i]);
                check(d[i],d[i]+s,i);

            }
            else if(v[i]>vx)
            {
                for(int j=1;j<=m;j++)
                {
                    if(p[j]>d[i])
                    {
                        car[i].l=i;
                        car[i].r=m;
                        break;
                    }
                }
            }
            else hk--;
        }
        for(int i=1;i<=n;i++)
            if(car[i].flag)hk--;
        cout<<hk<<' ';
        //hk=0;
        ans();
        cout<<m-an<<endl;
    }
    return 0;
}
